我們如何用tensorflow像R一樣快速地建立一個迴歸,我今天就使用skLearn這個package,從裡面的datasets就可以載入資料籍,然而我們今天就要透過這個資料籍,來做波士頓的房價預測。
from sklearn.datasets import load_boston
Boston =load_boston()
print(Boston)
有關bosten房價的資料就呈現出來了
但由於上面的資料太混砸了,我想讓數據剛好對到每一個表格,並且還要新增中位數的資料
import pandas as pd
TB = pd.DataFrame(data=Boston.data,columns=Boston.feature_names)
TB['MEDV']=Boston.target
print(TB.head())
這樣我們就能清楚的知道每一本資料的犯罪率、失業率,最後面也新增了房價的中位數欄位。
到這裡我們解決了資料的處理,現在要來做圖我以X軸為低收入戶的比率,y軸為房價。但因為我用的環境是pycharm所以要作圖的話還要外掛裝Pydot和graphviz這裡我會先import matplotlib.pyplot as plt,讓圖跑得來。
import matplotlib.pyplot as plt
import seaborn as sns
sns.scatterplot(TB['LSTAT'],TB.MEDV)
plt.show()
接下來透過tensorflow來搭建網路化出預測線,我會透過keras來搭建一個sequential的網路,但現在你只是搭建一個空的東西甚麼都沒有,所以我會透過dense來快速的搭建一個網路。
import tensorflow as tf
from tensorflow import keras
LR =tf.keras.Sequential(name='Linear Regression')
LR.add(tf.keras.layers.Dense(1,input_shape=(1,)))
print(LR.summary())
從這張圖我們知道我的網路只有一層,ouput有兩個,有兩個參數並且可以被訓練。
訓練有很多方法,我今天最佳化的方法是用adam,Learning rate我調成0.01,損失函數用MeanSquaredError(),經過我的測試發現大概訓練200次loss值會呈現平穩狀態,所以我的epochs調成200。
LR =tf.keras.Sequential(name='Linear Regression')
LR.add(tf.keras.layers.Dense(1,input_shape=(1,)))
LR.compile(tf.keras.optimizers.Adam(0.01),loss = tf.keras.losses.MeanSquaredError())
LR.fit(TB.LSTAT,TB.MEDV,epochs=200)
myPre = LR.predict(TB.LSTAT)
sns.scatterplot(TB.LSTAT,TB.MEDV)
sns.lineplot(TB.LSTAT,myPre[:,0])
plt.show()
參考
https://www.youtube.com/watch?v=4OnYrSGaSKw